import * as api from './api';
import {PAGE_CODE} from './constants';
import {PAGE} from '../constants';
import {
    getCurrentUserPagePermissionsSuccess,
    getCurrentUserPagePermissionsFail,
    getCurrentUserPagePermissionsApi
} from 'Shared/actions/currentUserContext';
export const ERROR_CODE = 'error';
export const GET_INIT_DATA_BEGIN = 'GET_INIT_DATA_BEGIN';
export const GET_INIT_DATA_SUCCESS = 'GET_INIT_DATA_SUCCESS';
export const GET_INIT_DATA_FAIL = 'GET_INIT_DATA_FAIL';
import {conventTableCondition} from '../utils';
const getInitDataBegin = () => ({
    type: GET_INIT_DATA_BEGIN
});

const getInitDataSuccess = data => ({
    type: GET_INIT_DATA_SUCCESS,
    data
});
const getInitDataFail = () => ({
    type: GET_INIT_DATA_FAIL
});
/**初始化 */
/*==============================查询列表================================= */
export const GET_LIST_DATA_BEGIN = 'GET_LIST_DATA_BEGIN';
export const GET_LIST_DATA_SUCCESS = 'GET_LIST_DATA_SUCCESS';
export const GET_LIST_DATA_FAIL = 'GET_LIST_DATA_FAIL';
const getListDataBegin = () => ({
    type: GET_LIST_DATA_BEGIN
});

const getListDataSuccess = (condition, data) => ({
    type: GET_LIST_DATA_SUCCESS,
    condition,
    data
});

const getListDataFail = () => ({
    type: GET_LIST_DATA_FAIL
});

/*==============================初始化API================================= */
//获取初始化数据和权限
export const getInitData = () => dispatch => {
    dispatch(getInitDataBegin());
    const init = api.getInitData().then(res => {
        if(res.ok)
            dispatch(getInitDataSuccess(res.data));
        else
            dispatch(getInitDataFail());
        return res.ok;
    });
    const permissions = getCurrentUserPagePermissionsApi(PAGE_CODE).then(res => {
        if(res.isOk) dispatch(getCurrentUserPagePermissionsSuccess(res.data));
        else dispatch(getCurrentUserPagePermissionsFail(res.statusCode, res.message));
        return res.isOk;
    });

    return Promise.all([init, permissions]).then(values => values[0] && values[1]);
};

/*==============================查询action================================= */
//获取查询列表
export const getList = condition => dispatch => {
    dispatch(getListDataBegin());
    const queryCondition = (conventTableCondition(condition));
    const {createTime, firstApproveTime, approveTime, ...props} = queryCondition;
    if(createTime && createTime.length > 0) {
        props.beginCreateTime = createTime[0];
        props.endCreateTime = createTime[1];
    }
    if(firstApproveTime && firstApproveTime.length > 0) {
        props.beginFirstApproveTime = firstApproveTime[0];
        props.endFirstApproveTime = firstApproveTime[1];
    }
    if(approveTime && approveTime.length > 0) {
        props.beginApproveTime = approveTime[0];
        props.endApproveTime = approveTime[1];
    }
    return api.getList(props).then(res => {
        if(res.ok)
            dispatch(getListDataSuccess(condition, res.data));
        else
            dispatch(getListDataFail());
    });
};
/*=============================获取详情================================== */
export const GET_DETAIL_BEGIN = 'GET_DETAIL_BEGIN';
export const GET_DETAIL_SUCCESS = 'GET_DETAIL_SUCCESS';
export const GET_DETAIL_FAIL = 'GET_DETAIL_FAIL';
export const getDetailBegin = () => ({
    type: GET_DETAIL_BEGIN,
});

export const getDetailSuccess = data => ({
    type: GET_DETAIL_SUCCESS,
    data,
});

const getDetailFail = () => ({
    type: GET_DETAIL_FAIL,
});

//获取详情
export const getDetail = id => dispatch => {
    dispatch(getDetailBegin());
    return api.getDetail(id).then(res => {
        if(res.ok)
            dispatch(getDetailSuccess(res.data));
        else
            dispatch(getDetailFail());
    });
};
//修改查询条件
export const SAVE_QUERY_CONDITION = 'SAVE_QUERY_CONDITION';
export const saveQueryCondition = (name, value) => ({
    type: SAVE_QUERY_CONDITION,
    name,
    value
});
//重置查询条件
export const RESET_QUERY_PANEL = 'RESET_QUERY_PANEL';
export const resetQueryPanel = () => ({
    type: RESET_QUERY_PANEL,
});

//按钮搜索
export const querySearch = () => (dispatch, getState) => {
    const condition = getState().getIn(['page', 'appState', 'queryCondition']).toJS();
    const pageTableCondition = getState().getIn(['page', 'appState', 'queryBySort']).toJS();
    condition.pageSize = pageTableCondition.pageSize || PAGE.size;
    condition.sortedColumnKey = pageTableCondition.sortedColumnKey;
    condition.sortedOrder = pageTableCondition.sortedOrder;
    dispatch(getList(condition));
};
//分页排序搜索
export const tableSearch = page => (dispatch, getState) => {
    const query = getState().getIn(['page', 'appState', 'queryBySort']).toJS();
    if(!query.pageIndex || !page)
        query.pageIndex = 0;
    const condition = Object.assign({}, query, page);
    dispatch(getList(condition));
};

//选择查询条件
export const SAVE_QUERY_DEALER = 'SAVE_QUERY_DEALER';
export const saveQueryDealer = data => ({
    type: SAVE_QUERY_DEALER,
    data
});
/*==============================导出================================= */
export const exportData = () => (dispatch, getState) => {
    const queryCondition = getState().getIn(['page', 'appState', 'queryCondition']).toJS();
    const {createTime, ...props} = queryCondition;
    if(createTime && createTime.length > 0) {
        props.beginCreateTime = createTime[0];
        props.endCreateTime = createTime[1];
    }
    return api.exports(props);
};

/*==============================新增修改action================================= */
export const onNewUpdate = (data, details, brandIdId, enterprise) => () => {
    const detailsData = details.map(item => {
        const partDetail = item.partDetails;
        const partDetails = partDetail.map(m => ({
            shipPartId: m.shipPartId,
            partAfterId: m.partAfterId,
            isFromKDBOM: m.isFromKDBOM,
            isSubPart: m.isSubPart,
            supplierCode: m.supplierCode
        }));
        return {
            kdBomCode: item.kdBomCode,
            quantity: item.quantity,
            productCategoryId: item.productCategoryId,
            engineCode: item.engineCode,
            transmissionSn: item.transmissionSn,
            vehicleFrameCode: item.vehicleFrameCode,
            partDetails,
        };
    });
    const addCondition = {
        brandId: brandIdId,
        dealerId: enterprise.dealerId,
        claimType: data.claimType,
        claimPartType: data.claimPartType,
        saleShipmentId: data.saleShipmentId,
        batchNumber: data.batchNumber,
        urgencyLevel: data.urgencyLevel,
        requireCompensationWay: data.requireCompensationWay,
        requireTransportType: data.requireTransportType,
        containerNumber: data.containerNumber,
        boxNumber: data.boxNumber,
        caseNumber: data.caseNumber,
        bLNumber: data.bLNumber,
        bLDate: data.bLDate,
        description: data.description,
        remark: data.remark,
        details: detailsData,
        claimDetails: data.claimDetails && data.claimDetails.map(v => ({
            fileId: v.fileId,
            fileName: v.fileName
        }))
    };
    const updateCondition = {
        brandId: brandIdId,
        dealerId: enterprise.dealerId,
        claimType: data.claimType,
        claimPartType: data.claimPartType,
        saleShipmentId: data.saleShipmentId,
        batchNumber: data.batchNumber,
        urgencyLevel: data.urgencyLevel,
        requireCompensationWay: data.requireCompensationWay,
        requireTransportType: data.requireTransportType,
        containerNumber: data.containerNumber,
        boxNumber: data.boxNumber,
        caseNumber: data.caseNumber,
        bLNumber: data.bLNumber,
        bLDate: data.bLDate,
        description: data.description,
        remark: data.remark,
        rowVersion: data.rowVersion,
        details: detailsData,
        claimDetails: data.claimDetails && data.claimDetails.map(v => ({
            fileId: v.fileId,
            fileName: v.fileName
        }))
    };
    return data.id ? api.modifyOrder(data.id, updateCondition)
        .then(res => ({success: res.ok})) : api.newOrder(addCondition).then(res => ({success: res.ok}));
};
